import axios from 'axios'
import { ElMessage } from 'element-plus'
import store from '@/store'
import router from '@/router'

const service = axios.create({
    baseURL: 'https://meapi.inzj.cn/api/',
    timeout: 10000,
    // withCredentials: true,
})

// 拦截请求
service.interceptors.request.use(
    config => {
        const { authorization } = store.state.app
        if (authorization) {
            config.headers.Authorization = authorization.token
        }
        return config
    },
    error => {
        // console.log(error);
        return Promise.reject(error)
    }
)

// 拦截响应
service.interceptors.response.use(
    // 响应成功进入第1个函数，该函数的参数是响应对象
    response => {
        if(response.data.code === 403){
            ElMessage.error(response.data.message)
            const redirect = encodeURIComponent(window.location.href)
            router.push(`/login?redirect=${redirect}`)
            // 清除token
            store.dispatch('app/clearToken')
        }else {
            return response.data
        }

    },
    // 响应失败进入第2个函数，该函数的参数是错误对象
    async error => {
        // 如果响应码是 401 ，则请求获取新的 token

        // 响应拦截器中的 error 就是那个响应的错误对象
        if (error.response.code === 401) {
            // 校验是否有 refresh_token
            const { authorization } = store.state.app
            if (!authorization || !authorization.refresh_token) {
                const redirect = encodeURIComponent(window.location.href)
                router.push(`/login?redirect=${redirect}`)
                // 清除token
                store.dispatch('app/clearToken')
                // 代码不要往后执行了
                return Promise.reject(error)
            }
        }

        // console.dir(error) // 可在此进行错误上报
        ElMessage.error(error.message)

        return Promise.reject(error)
    }
)

export default service